package exam;

import sun.plugin.javascript.navig.Link;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author げっしょく
 * @date 2021/7/28
 */
public class Test3 {
    public static void main(String[] args) {
        //methon();
        //methon2();
        //methon3();
        ArrayList<String> list = new ArrayList<>();
        String province = "河北省、山西省、吉林省、辽宁省、黑龙江省、陕西省、甘肃省、青海省、山东省、" +
                "福建省、浙江省、台湾省、河南省、湖北省、湖南省、江西省、江苏省、安徽省、广东省、海南省、" +
                "四川省、贵州省、云南省、北京市、天津市、上海市、重庆市、" +
                "内蒙古自治区、新疆维吾尔自治区、宁夏回族自治区、广西壮族自治区、西藏自治区、香港特别行政区、澳门特别行政区";
        String[] split = province.split("、");
        for (int i = 0; i < split.length; i++) {
            list.add(split[i]);
        }
        List<String> list1 = list.stream().filter(s -> {
            if (s.endsWith("省")) {
                return false;
            }
            return true;
        }).collect(Collectors.toList());
        System.out.println(list1);

    }

    private static void methon3() {
        //我国有34个省级行政区，分别是：
        //23个省：
        //河北省、山西省、吉林省、辽宁省、黑龙江省、陕西省、甘肃省、青海省、山东省、福建省、
        //浙江省、台湾省、河南省、湖北省、湖南省、江西省、江苏省、安徽省、广东省、海南省、四川省、贵州省、云南省。
        //4个直辖市：
        //北京市、天津市、上海市、重庆市。
        //5个自治区：
        //内蒙古自治区、新疆维吾尔自治区、宁夏回族自治区、广西壮族自治区、西藏自治区。
        //2个特别行政区：
        //香港特别行政区、澳门特别行政区。
        //


        //4、将所有的特殊省份（自治区直辖市特别行政区）提取出来并放到新集合中


        ArrayList<String> list = new ArrayList<>();
        String province = "河北省、山西省、吉林省、辽宁省、黑龙江省、陕西省、甘肃省、青海省、山东省、福建省、浙江省、台湾省、河南省、湖北省、湖南省、江西省、江苏省、安徽省、广东省、海南省、四川省、贵州省、云南省";
        String[] split = province.split("、");
        for (int i = 0; i < split.length; i++) {
            list.add(split[i]);
        }
        ArrayList<String> list1 = new ArrayList<>();
        String city = "北京市、天津市、上海市、重庆市";
        String[] split1 = city.split("、");
        for (int i = 0; i < split1.length; i++) {
            list1.add(split1[i]);
        }
        ArrayList<String> list2 = new ArrayList<>();
        String municipality = "内蒙古自治区、新疆维吾尔自治区、宁夏回族自治区、广西壮族自治区、西藏自治区";
        String[] split2 = municipality.split("、");
        for (int i = 0; i < split2.length; i++) {
            list2.add(split2[i]);
        }
        ArrayList<String> list3 = new ArrayList<>();
        list3.add("香港特别行政区");
        list3.add("澳门特别行政区");
        //使用流：
        //1、统计三个字的省份的个数
        int province1 = (int) list.stream().filter(s -> s.length() == 3).count();
        System.out.println(province1);
        //2、统计名字中包含方位名词的省份（东西南北）的个数
        Stream<String> stream = list.stream();
        Stream<String> stream1 = list1.stream();
        Stream<String> stream2 = list2.stream();
        Stream<String> stream3 = list3.stream();
        Stream<String> concat = Stream.concat(stream, stream1);
        Stream<String> concat1 = Stream.concat(stream2, stream3);
        long count = Stream.concat(concat, concat1).filter(s -> {
            for (int i = 0; i < s.length(); i++) {
                Character c = s.charAt(i);
                if (c.equals('东') || c.equals('南') || c.equals('西') || c.equals('北')) {
                    return true;
                }

            }
            return false;
        }).count();
        System.out.println(count);
        //3、打印名字中包含方位名词的普通省份（非自治区直辖市特别行政区）的名字
        long count1 = list.stream().filter(s -> {
            for (int i = 0; i < s.length(); i++) {
                Character c = s.charAt(i);
                if (c.equals('东') || c.equals('南') || c.equals('西') || c.equals('北')) {
                    return true;
                }
            }
            return false;
        }).count();
        System.out.println(count1);
    }

    private static void methon2() {
    /*
    全球
1、 《教父》
2、 《肖申克的救赎》
3、 《辛德勒的名单》
4、 《公民凯恩》
5、 《卡萨布兰卡》
6、 《教父续集》
7、 《七武士》
8、 《星球大战》
9、 《美国美人》
10、 《飞跃疯人院》

华人
1、 《霸王别姬》
2、 《大闹天宫》
3、 《鬼子来了》
4、 《大话西游》
5、 《活着》
6、 《饮食男女》
7、 《无间道》
8、 《天书奇谭》
9、 《哪吒脑海》
10、 《春光乍泄》


     */
        ArrayList<String> list = new ArrayList<>();
        //1、现将两个榜单中的影片名，分别按排名顺序依次存入两个ArrayList集合
        list.add("《霸王别姬》");
        list.add("《大闹天宫》");
        list.add("《鬼子来了》");
        list.add("《大话西游》");
        list.add("《活着》");
        list.add("《饮食男女》");
        list.add("《无间道》");
        list.add("《天书奇谭》");
        list.add("《哪吒脑海》");
        list.add("《春光乍泄》");
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("《教父》");
        list1.add("《肖申克的救赎》");
        list1.add("《辛德勒的名单》");
        list1.add("《公民凯恩》");
        list1.add("《卡萨布兰卡》");
        list1.add("《教父续集》");
        list1.add("《七武士》");
        list1.add("《星球大战》");
        list1.add("《美国美人》");
        list1.add("《飞跃疯人院》");
        //2、通过流的方式
        //	1）打印全球影片排行榜中的前三甲影片名
        list1.stream().limit(3).forEach(s -> System.out.println(s));
        //	2）打印华人影片排行榜中倒数5名的影片名
        list.stream().skip(5).forEach(s -> System.out.println(s));
        //	3）将两个排行榜中的前5名挑出来共同存入新的集合
        Stream<String> stream = list.stream().skip(5);
        Stream<String> stream1 = list1.stream().limit(5);
        Stream.concat(stream, stream1).forEach(s -> System.out.println(s));
    }

    private static void methon() {
    /*
现在有两个ArrayList集合，分别存储6名男演员名称和6名女演员名称，要求完成如下的操作

演员类Actor已经提供，里面有一个成员变量，一个带参构造方法，以及成员变量对应的get/set方法

 */
        ArrayList<String> manList = new ArrayList<String>();
        manList.add("周润发");
        manList.add("成龙");
        manList.add("刘德华");
        manList.add("吴京");
        manList.add("周星驰");
        manList.add("李连杰");

        ArrayList<String> womanList = new ArrayList<String>();
        womanList.add("林心如");
        womanList.add("张曼玉");
        womanList.add("林青霞");
        womanList.add("柳岩");
        womanList.add("林志玲");
        womanList.add("王祖贤");
        //- 男演员只要名字为3个字的前三人
        Stream<String> limit = manList.stream().filter(name -> name.length() == 3).limit(2);
        //- 女演员只要姓林的，并且不要第一个
        Stream<String> skip = womanList.stream().filter(name -> name.startsWith("林")).skip(1);
        //- 把过滤后的男演员姓名和女演员姓名合并到一起
        //- 把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据
        Stream.concat(limit,skip).forEach(name -> {
            Actor actor = new Actor(name);
            System.out.println(actor);
        });
    }
}
